]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspace: Clip window previews
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Wed, 17 Feb 2021 14:09:31 +0000 (11:09 -0300)
committerMarge Bot <marge-bot@gnome.org>
Sun, 21 Feb 2021 15:47:12 +0000 (15:47 +0000)
Window previews can spill out of the container when their position in the
session overflows the monitor boundaries. In the past, Workspace didn't have
a visible background, and was (almost) always fullscreen, which would mask
this particular problem. However, nowadays, it is very much noticeable when
this situation happens.

Clip the window previews container to its allocation when the overview state
is bigger than WINDOW_PICKER. That is, between HIDDEN and WINDOW_PICKER states,
inclusive, no clipping is applied.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1691>

js/ui/workspace.js

index 47f1c69f2b101791389e3f81ea47b5fc3f49256d..b849771a62f7e0d6e64bfbb4c0eeb15d82fdbcbe 100644 (file)
@@ -991,6 +991,16 @@ class Workspace extends St.Widget {
             });
 
         this._overviewAdjustment = overviewAdjustment;
+        this._overviewStateId = overviewAdjustment.connect('notify::value', () => {
+            const overviewState = overviewAdjustment.value;
+
+            // We want windows not to spill out when the overview is in
+            // APP_GRID state, but HIDDEN and WINDOW_PICKER should allow
+            // them to eventually draw outside the workspace.
+            this._container.clip_to_allocation =
+                overviewState > OverviewControls.ControlsState.WINDOW_PICKER;
+        });
+
         this.monitorIndex = monitorIndex;
         this._monitor = Main.layoutManager.monitors[this.monitorIndex];
 
@@ -1241,6 +1251,11 @@ class Workspace extends St.Widget {
             this._layoutFrozenId = 0;
         }
 
+        if (this._overviewStateId > 0) {
+            this._overviewAdjustment.disconnect(this._overviewStateId);
+            delete this._overviewStateId;
+        }
+
         this._windows = [];
     }